package com.example.lifecycle.listener;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ConfigurableBootstrapContext;
import org.springframework.boot.SpringApplicationRunListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;

import java.time.Duration;


/**
 * 监听启动流程
 *
 * 引导--->启动--->运行
 */
@Slf4j
public class AppRunListener implements SpringApplicationRunListener {

    @Override
    public void starting(ConfigurableBootstrapContext bootstrapContext) {
        System.out.println("============starting=============正在启动=======================");
        // 此时日志环境还没初始化，所以不能使用log
        //log.info("============starting=============正在启动=======================");
    }

    @Override
    public void environmentPrepared(ConfigurableBootstrapContext bootstrapContext, ConfigurableEnvironment environment) {
        log.info("============environmentPrepared=============环境准备完成=======================");
    }

    @Override
    public void contextPrepared(ConfigurableApplicationContext context) {
        log.info("============contextPrepared=============IOC容器准配完成=======================");
    }

    @Override
    public void contextLoaded(ConfigurableApplicationContext context) {
        log.info("============contextLoaded=============IOC容器加载完成=======================");
    }

    @Override
    public void started(ConfigurableApplicationContext context, Duration timeTaken) {
        log.info("============started=============启动完成=======================");
    }

    @Override
    public void ready(ConfigurableApplicationContext context, Duration timeTaken) {
        log.info("============ready=============准备就绪，可以接受外部请求了=======================");
    }

    @Override
    public void failed(ConfigurableApplicationContext context, Throwable exception) {
        log.info("============failed=============启动失败=======================");
    }
}
